﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace SpaceRivals
{
    public partial class connexion : System.Web.UI.Page
    {
        cGeneric generic = new cGeneric();
        
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        protected void ButtonConnexion_Click(object sender, EventArgs e)
        {
            Boolean IdentifiantsTrouvés = false;
            DBSpaceRivalsDataContext DB = new DBSpaceRivalsDataContext();
            var controle = DB.EstConnexionAcceptee(TextBoxLogin.Text, TextBoxPass.Text);

            //Initialisation des labels
            MasquerNotificationReussite();
            MasquerMessageErreur();
          
            foreach (EstConnexionAccepteeResult valeur_retour in controle)
            {
                if (valeur_retour.CompteActifJoueur == true)
                {
                    IdentifiantsTrouvés = true;
                    NotifierConnexionJoueur(valeur_retour.IdJoueur);
                    RedirigerSelonNbConnexions(Convert.ToInt64(valeur_retour.NombreDeConnexion)); 
                }
                else AfficherMesageErreur("Votre compte est inactif.");
            }

            if (!IdentifiantsTrouvés) AfficherMesageErreur("Echec de connexion. Vérifiez vos identifiants");

        }

        protected void AfficherMesageErreur(string uneErreur)
        {
            LabelErreur.Text = uneErreur;
            LabelErreur.Visible = true;
        }

        protected void NotifierReussite(string unMessage)
        {
            LabelMessage.Text = unMessage;
            LabelMessage.Visible = true;
        }

        protected void MasquerMessageErreur()
        {
            LabelErreur.Visible = false;
        }

        protected void MasquerNotificationReussite()
        {
            LabelMessage.Visible = false;
        }

        protected Boolean NotifierConnexionJoueur(string unIdJoueur)
        {
            string AdresseIP = Request.UserHostAddress;
            DBSpaceRivalsDataContext DB = new DBSpaceRivalsDataContext();
            var controle = DB.AdresseIPExistante_sIdJoueur_sAdresseIP(unIdJoueur, AdresseIP);
            string IDInfosConnexion = "";
            var query1 = from infoconnexion in DB.TINFOSCONNEXION
                         join joueur in DB.TJOUEUR on infoconnexion.IDJOUEUR equals joueur.IDJOUEUR
                         where joueur.IDJOUEUR == unIdJoueur
                         select infoconnexion;

            try
            {
            
                foreach (TINFOSCONNEXION info in query1)
                {
                    info.NOMBREDECONNEXION += 1;
                    info.DATEDERNIERECONNEXION = DateTime.Now;
                    IDInfosConnexion = info.IDINFOSCONNEXION;
                }

                
                DB.SubmitChanges();
                Page.Session.Add("IdJoueur", unIdJoueur);

                RenseignerAdresseIP(controle, IDInfosConnexion, AdresseIP);

            }      
            catch { return false; }
            return true;
            
        }

        private bool RenseignerAdresseIP(ISingleResult<AdresseIPExistante_sIdJoueur_sAdresseIPResult> controle, 
            string IDInfosConnexion, string AdresseIP)
        {
            DBSpaceRivalsDataContext DB = new DBSpaceRivalsDataContext();

            try
            {
                // Si l'adresse IP n'existe pas déjà, on la créée
                if (controle.Count<AdresseIPExistante_sIdJoueur_sAdresseIPResult>() == 0)
                {
                    TLOCALISATIONSIP a = new TLOCALISATIONSIP()
                    {
                        IDLOCALISATIONIP = generic.GenererId(typeof(TLOCALISATIONSIP)),
                        IDINFOSCONNEXION = IDInfosConnexion,
                        ADRESSEIP = AdresseIP,
                        TYPECONNEXION = ""
                    };
                    DB.TLOCALISATIONSIP.InsertOnSubmit(a);
                }
            }
            catch { return false; }
            return true;
        }

        protected void RedirigerSelonNbConnexions(Int64 unNombreDeConnexions)
        {
            if (unNombreDeConnexions > 0) Page.Response.Redirect("~/accueil_joueur.aspx");
            else Page.Response.Redirect("~/premiere_connexion.aspx");
        }

    }
}
